코딩테스트 연습 - 부족한 금액 계산하기 | 프로그래머스 스쿨 [ 템플릿 코드 ]

using namespace std;
 
long long solution(int price, int money, int count)
{
    long long answer = -1;
 
    return answer;
}

[ 풀이 ]

using namespace std;
 
long long solution(int price, int money, int count)
{
    long long totalPrice = (long long)price * count * (count + 1) / 2;
 
    if (totalPrice <= money)
    {
        return 0;
    }
 
    return totalPrice - money;
}

[ 해설 ]

using namespace std;
 
// 놀이기구의 이용료(price), 현재 가진 돈(money), 이용 횟수(count)를 받아
// 부족한 금액을 반환하는 함수
long long solution(int price, int money, int count)
{
    // 1회 ~ count회까지의 총 이용 금액 계산
    // 등차수열의 합 공식 사용
    // price × (1 + 2 + ... + count)
    // = price × count × (count + 1) / 2
    // 금액이 커질 수 있으므로 long long으로 형변환
    long long totalPrice = (long long)price * count * (count + 1) / 2;
 
    // 총 이용 금액이 현재 가진 돈보다 작거나 같다면
    // 추가로 필요한 금액이 없으므로 0 반환
    if (totalPrice <= money)
    {
        return 0;
    }
 
    // 총 이용 금액이 가진 돈보다 크다면
    // 부족한 금액(총 이용 금액 - 현재 가진 돈)을 반환
    return totalPrice - money;
}

[ 타 답안 ]

using namespace std;
 
// 놀이기구 1회 이용 가격(price)
// 현재 가진 돈(money)
// 총 이용 횟수(count)를 받아
// 부족한 금액을 반환하는 함수
long long solution(int price, int money, int count)
{
    // 총 이용 금액을 저장할 변수
    long long sum = 0;
 
    // count번부터 1번까지 반복
    // 각 이용 횟수에 해당하는 요금을 누적
    for (int n = count; n > 0; n--)
        sum += n * price;
 
    // 총 이용 금액이 현재 가진 돈보다 많다면
    // 부족한 금액을 반환
    if (sum > money)
        return sum - money;
    else
        // 가진 돈으로 충분하면 0 반환
        return 0;
}

C++ CodingTest